/**
 * 马拉松配速计算器工具函数
 */

/**
 * 计算每公里配速
 * @param {number} totalTimeInMinutes - 总时间（分钟）
 * @param {number} distance - 总距离（公里）
 * @returns {number} - 每公里配速（分钟）
 */
export const calculatePacePerKm = (totalTimeInMinutes, distance) => {
  return totalTimeInMinutes / distance;
};

/**
 * 将分钟数转换为时:分:秒格式
 * @param {number} minutes - 分钟数
 * @returns {string} - 格式化后的时间字符串 (HH:MM:SS)
 */
export const formatTime = (minutes) => {
  const hours = Math.floor(minutes / 60);
  const mins = Math.floor(minutes % 60);
  const secs = Math.floor((minutes % 1) * 60);
  
  return [
    hours.toString().padStart(2, '0'),
    mins.toString().padStart(2, '0'),
    secs.toString().padStart(2, '0')
  ].join(':');
};

/**
 * 将时:分:秒格式转换为总分钟数
 * @param {string} timeString - 时间字符串 (HH:MM:SS)
 * @returns {number} - 总分钟数
 */
export const parseTimeToMinutes = (timeString) => {
  const [hours, minutes, seconds] = timeString.split(':').map(Number);
  return hours * 60 + minutes + seconds / 60;
};

/**
 * 生成配速表格数据
 * @param {number} totalTimeInMinutes - 总时间（分钟）
 * @param {number} totalDistance - 总距离（公里）
 * @returns {Array} - 配速表格数据
 */
export const generatePaceTable = (totalTimeInMinutes, totalDistance) => {
  const pacePerKm = calculatePacePerKm(totalTimeInMinutes, totalDistance);
  const table = [];
  
  let accumulatedTime = 0;
  
  for (let km = 1; km <= totalDistance; km++) {
    accumulatedTime += pacePerKm;
    
    table.push({
      distance: km,
      accumulatedTime: formatTime(accumulatedTime),
      pace: formatTime(pacePerKm)
    });
  }
  
  // 处理最后不足1公里的部分（如果有）
  const fraction = totalDistance % 1;
  if (fraction > 0) {
    const lastKm = Math.floor(totalDistance) + 1;
    const lastKmTime = pacePerKm * fraction;
    accumulatedTime += lastKmTime;
    
    table.push({
      distance: totalDistance.toFixed(3),
      accumulatedTime: formatTime(accumulatedTime),
      pace: formatTime(pacePerKm)
    });
  }
  
  return table;
};

/**
 * 获取预设的完赛时间选项
 * @param {string} raceType - 赛程类型 ('half' 或 'full')
 * @returns {Array} - 预设时间选项数组
 */
export const getPresetTimes = (raceType) => {
  if (raceType === 'half') {
    return [
      { label: '1小时30分', value: '01:30:00' },
      { label: '1小时45分', value: '01:45:00' },
      { label: '2小时00分', value: '02:00:00' },
      { label: '2小时15分', value: '02:15:00' },
      { label: '2小时30分', value: '02:30:00' },
      { label: '2小时45分', value: '02:45:00' }
    ];
  } else if (raceType === 'full') {
    return [
      { label: '3小时00分', value: '03:00:00' },
      { label: '3小时30分', value: '03:30:00' },
      { label: '4小时00分', value: '04:00:00' },
      { label: '4小时30分', value: '04:30:00' },
      { label: '5小时00分', value: '05:00:00' },
      { label: '5小时30分', value: '05:30:00' }
    ];
  }
  return [];
};

/**
 * 获取赛程距离
 * @param {string} raceType - 赛程类型 ('half' 或 'full')
 * @returns {number} - 赛程距离（公里）
 */
export const getRaceDistance = (raceType) => {
  return raceType === 'half' ? 21.0975 : 42.195;
};